<?php


/**
 * Classe que usa o padrão Data Access Object para criar, ler, atualizar e deletar no banco de dados objetos do tipo Modalidade
 * @name ModalidadeDAO
 * @author Fabio Cezar Baía baiacfabio@gmail.com
 * @since 24/04/2013 06:39:49
 */
class ModalidadeDAO extends DAO{
	
	/**
	 * Persiste uma nova Modalidade no banco de dados ou atualiza caso ja exista
	 * @access public
     * @name save
	 * @param Modalidade $modalidade
	 * @since 24/04/2013 06:42:36
	 */
	public function save( Modalidade $modalidade ) {		
		
		if($modalidade->getId() == ""){			
			$this->insert($modalidade);		
		}else{
			$this->update($modalidade);		
		}
				
	}
	
	
	/**
	* Insere uma nova Modalidade no banco de dados
	* @access private
	* @name insert
	* @param Modalidade $modalidade
	* @since 24/04/2013 06:43:59
	*/
	private function insert(Modalidade $modalidade) {
		try{				
			$stmt = $this->db->prepare("INSERT INTO `{$this->entity}` (nome, dataModificacao) VALUES (?, ?)");
			$stmt->bindValue(1, $modalidade->getNome() );
			$stmt->bindValue(2, $modalidade->getDataModificacao()->format("Y-m-d H:i:s") );
			$stmt->execute();
			
			//SystemMessage::createMessage("Modalidade cadastrada com sucesso!", SystemMessage::TYPE_SUCCESS);
			
			// fecho a conexão
			$this->db = null;
			// caso ocorra um erro, retorna o erro;
		}catch ( PDOException $ex ){
			//SystemMessage::createMessage("Um erro ocorreu! Não foi possível concluir a operação.", SystemMessage::TYPE_ERROR, $ex->getMessage());
		}
	}
	
	/**
	* Atualiza uma Modalidade no banco de dados
	* @access private
	* @name update
	* @param Modalidade $modalidade
	* @since 24/04/2013 06:48:59
	*/
	private function update(Modalidade $modalidade) {

		try{
			
			$stmt = $this->db->prepare("UPDATE `{$this->entity}` set nome = ?, dataModificacao = ? WHERE id = ?");
			$stmt->bindValue(1, $modalidade->getNome() );
			$stmt->bindValue(2, $modalidade->getDataModificacao()->format("Y-m-d H:i:s") );
			$stmt->bindValue(3, $modalidade->getId() );
			
			//SystemMessage::createMessage("Modalidade atualizada com sucesso!", SystemMessage::TYPE_SUCCESS);
			
			
			$stmt->execute();
			// fecho a conexão
			$this->db = null;
			
			
			// caso ocorra um erro, retorna o erro;
		}catch ( PDOException $ex ){
			//SystemMessage::createMessage("Um erro ocorreu! Não foi possível concluir a operação.", SystemMessage::TYPE_ERROR, $ex->getMessage());
		}
		
	}
	
	/**
	* Obtem uma Modalidade do banco com base no id
	* @access public
	* @name get
	* @param int $id Id da Modalidade a ser obtida
	* @since 24/04/2013 06:51:12
	* @return Modalidade
	*/
	public function get($id) {
		$modalidade = new Modalidade();
		
		try{
			$stmt = $this->db->prepare("SELECT * FROM `{$this->entity}` WHERE id = ?");
			$stmt->bindValue(1, $id, PDO::PARAM_INT);
			$stmt->execute();
			
			$obj = $stmt->fetchObject();
			$modalidade->setId($obj->id);
			$modalidade->setNome($obj->nome);
			$modalidade->setDataModificacao($obj->dataModificacao);
			
			// fecho a conexão
			$this->db = null;
			// caso ocorra um erro, retorna o erro;
		}catch ( PDOException $ex ){
			echo "Erro: ".$ex->getMessage();
		}		
		
		return $modalidade;
	}
	
	/**
	* Lista todos as Modalidades do banco
	* @access public
	* @name listAll
	* @since 24/04/2013 06:54:26
	* @return array Array de Modalidades
	*/
	public function listAll() {
		$lista = array();
		
		try{
			$stmt = $this->db->prepare("SELECT * FROM `{$this->entity}`");
			$stmt->execute();
			
			while ($row = $stmt->fetch(PDO::FETCH_OBJ, PDO::FETCH_ORI_NEXT)) {
				$modalidade = new Modalidade();
				$modalidade->setId($row->id);
				$modalidade->setNome($row->nome);
				$modalidade->setDataModificacao($row->dataModificacao);
				
				$lista[] = $modalidade;
			}			
			
			// fecho a conexão
			$this->db = null;
			// caso ocorra um erro, retorna o erro;
		}catch ( PDOException $ex ){
			echo "Erro: ".$ex->getMessage();
		}
		
		return $lista;
	}
	
	
	/**
	* Remove uma Modalidade do banco com base no id
	* @access public
	* @name delete
	* @param int $id Id da Modalidade a ser deletada
	* @since 24/04/2013 06:56:59
	*/
	public function delete($id) {
		try{
			$stmt = $this->db->prepare("DELETE FROM `{$this->entity}` WHERE id = ?");
			$stmt->bindValue(1, $id, PDO::PARAM_INT);
			$stmt->execute();
			
			//SystemMessage::createMessage("Modalidade removida com sucesso!", SystemMessage::TYPE_SUCCESS);
			
			// fecho a conexão
			$this->db = null;
			// caso ocorra um erro, retorna o erro;
		}catch ( PDOException $ex ){
			//SystemMessage::createMessage("Um erro ocorreu! Não foi possível concluir a operação.", SystemMessage::TYPE_ERROR, $ex->getMessage());
		}
				
	}

}


